package com.ruoyi.system.service.impl;

import java.util.List;
import java.util.UUID;

import com.alibaba.fastjson.JSON;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.buffer.GameData;
import com.ruoyi.system.game.dto.UserLoginDto;
import com.ruoyi.system.game.dto.UserRegisterDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.game.GameUserInfoMapper;
import com.ruoyi.system.domain.game.GameUserInfo;
import com.ruoyi.system.service.IGameUserInfoService;
import com.ruoyi.common.core.text.Convert;
import org.springframework.transaction.annotation.Transactional;

/**
 * 游戏用户信息Service业务层处理
 * 
 * @author ruoyi
 * @date 2023-07-26
 */
@Service
@Transactional
public class GameUserInfoServiceImpl implements IGameUserInfoService 
{

    private static final Logger log = LoggerFactory.getLogger(GameUserInfoServiceImpl.class);

    @Autowired
    private GameUserInfoMapper gameUserInfoMapper;

    /**
     * 查询游戏用户信息
     * 
     * @param id 游戏用户信息主键
     * @return 游戏用户信息
     */
    @Override
    public GameUserInfo selectGameUserInfoById(String id)
    {
        return gameUserInfoMapper.selectGameUserInfoById(id);
    }

    /**
     * 查询游戏用户信息列表
     * 
     * @param gameUserInfo 游戏用户信息
     * @return 游戏用户信息
     */
    @Override
    public List<GameUserInfo> selectGameUserInfoList(GameUserInfo gameUserInfo)
    {
        return gameUserInfoMapper.selectGameUserInfoList(gameUserInfo);
    }

    /**
     * 新增游戏用户信息
     * 
     * @param gameUserInfo 游戏用户信息
     * @return 结果
     */
    @Override
    public int insertGameUserInfo(GameUserInfo gameUserInfo)
    {
        return gameUserInfoMapper.insertGameUserInfo(gameUserInfo);
    }

    /**
     * 修改游戏用户信息
     * 
     * @param gameUserInfo 游戏用户信息
     * @return 结果
     */
    @Override
    public int updateGameUserInfo(GameUserInfo gameUserInfo)
    {
        return gameUserInfoMapper.updateGameUserInfo(gameUserInfo);
    }

    /**
     * 批量删除游戏用户信息
     * 
     * @param ids 需要删除的游戏用户信息主键
     * @return 结果
     */
    @Override
    public int deleteGameUserInfoByIds(String ids)
    {
        return gameUserInfoMapper.deleteGameUserInfoByIds(Convert.toStrArray(ids));
    }

    /**
     * 删除游戏用户信息信息
     * 
     * @param id 游戏用户信息主键
     * @return 结果
     */
    @Override
    public int deleteGameUserInfoById(String id)
    {
        return gameUserInfoMapper.deleteGameUserInfoById(id);
    }


    /**
     * 客户端用户注册
     * @param user
     * @return
     */
    public GameData register(UserRegisterDto user){

        GameData data=new GameData();

        GameUserInfo info=new GameUserInfo();

        //验证手机号和验证码

        //创建UUID，后续还是使用自增ID吧
        info.setId(UUID.randomUUID().toString());

        //检测手机号是否绑定超标
        int accountCount=gameUserInfoMapper.CheckPhoneAccountCount(user.getUserPhone());
        if (accountCount>=5){
            data.setCode(401);//TODO 错误码需要制定
            data.setMessage("当前手机号已经绑定"+accountCount+",超过最大限制，请重新输入手机号注册");
            return data;
        }

        if (user.getUserPass().equals(user.getConfirmPass())){
            log.info(">>>>>>>>>密码确认通过<<<<<<<<<<<");
        }else{
            data.setCode(401);//TODO 错误码需要制定
            data.setMessage("两次输入的密码不相同!");
            return data;
        }
        if (user.getVerifyCode().equals("123456")){
            log.info(">>>>>>>>>验证码校验通过<<<<<<<<<<<");
        }else{
            data.setCode(401);//TODO 错误码需要制定
            data.setMessage("验证码错误！");
            return data;
        }

        //填写数据
        info.setEncipherStr("123455");
        info.setGameAccount(user.getUserAccount());
        info.setPhone(user.getUserPhone());
        info.setGamePass(user.getUserPass());

        //插入数据
        if (gameUserInfoMapper.insertGameUserInfo(info)>0){
            data.setCode(200);
            data.setData(JSON.toJSONString(info));
            data.setMessage("注册成功");
        }

        return data;
    }

    /**
     * 客户端登录
     * @param user
     * @return
     */
    @Override
    public GameData Login(UserLoginDto user) {

        GameData data=new GameData();

        if (user!=null){

            GameUserInfo userInfo = gameUserInfoMapper.selectGameUserInfoByAccount(user.getUserAccount());

            if (null==userInfo){
                data.setCode(401);
                data.setMessage("找不到该账号，请确认后重新输入！");
                return data;
            }

            //校验密码
            if (!userInfo.getGamePass().equals(user.getUserPass())){
                data.setCode(401);
                data.setMessage("密码错误，请重新输入密码！");
                return data;
            }

            data.setMessage("登录成功！");
            data.setCode(200);
            data.setData(JSON.toJSONString(userInfo));

        }else{
            data.setCode(401);
            data.setMessage("用户数据为空，请重新提交数据");
        }

        return data;
    }
}
